﻿using StockholmsStad.Runtime.Serialization.DataContract;

namespace StockholmsStad.Data.Interfaces
{
    /// <summary>
    /// Vanliga operationer på person objektet
    /// </summary>
    public interface IPersonAgent
    {
        /// <summary>
        /// Lägg till en ny person
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="person">Person som ska läggas till</param>
        /// <returns>Den nya personens id värde</returns>
        int AddPerson(IDataContext context, Person person);

        /// <summary>
        /// Hämta existerande person
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="personId">PersonId på den person som ska hämtas</param>
        /// <returns>Den aktuella personen</returns>
        Person GetPerson(IDataContext context, int personId);

        /// <summary>
        /// Uppdaterar befintlig person
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="personId"></param>
        /// <param name="person">Personen som ska uppdateras</param>
        void UpdatePerson(IDataContext context, int personId, Person person);

        /// <summary>
        /// Uppdaterar befintlig kontaktperson
        /// </summary>
        /// <param name="person">Personen som ska uppdateras</param>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="personId">Id värdet på den person som ska uppdateras</param>
        int? UpdatePerson(IDataContext context, int? personId, ContactPerson person);

        /// <summary>
        /// Lägger till en kontaktperson
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="person"></param>
        /// <returns></returns>
        int? AddPerson(IDataContext context, ContactPerson person);

        /// <summary>
        /// Hämtar en person som kontaktperson
        /// </summary>
        /// <param name="context">Det databascontext som operationen köra i</param>
        /// <param name="personId"></param>
        /// <returns></returns>
        ContactPerson GetPerson(IDataContext context, int? personId);
    }
}